package com.k.Exception;
/**
 * 异常的传递，给调用者反馈异常信息
 * throws异常的声明
 * 该过程允许输入奇数，如果不是奇数，运行将默认打印异常信息，并停止程序
 * throws向上报告异常的方式，将异常交给jvm
 * Exception与RuntimeException是不相同的,后者是可以不声明异常的
 *
 * 打印：main---start
 *      m1---start
 *      m2--start
 *      main--end
 * try-catch不能在异常声明的地方进行处理，到达main函数必须进行处理，防止系统的中断
 * 以下过程表示m1和m2作为一段功能的实现形式，在m2发生异常，将传递给m1，进而传递给main，
 * 在main中进行异常的抛出，正常执行完成程序，并打印异常信息
 * */
public class TestTransferException {
    public static void main(String[] args){
        System.out.println("main---start");
        try {
            m1(2);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("main--end");
    }
    public static void m1(int i) throws Exception{   //进行异常的传递，由m2传递给m1
        System.out.println("m1---start");
        m2(i);
        System.out.println("m1---end");
    }
    public static void m2(int i) throws Exception{      //向上报告
        System.out.println("m2--start");
        if (i % 2==0){      //如果是偶数反馈异常
            throw new Exception("not 偶数");
        }
        System.out.println("m2--end");
    }
}
